Refactor PowerMockWhiteboxToJavaReflection into per-API recipes#1021
Merged
Conversation
Restructure the monolithic `PowerMockWhiteboxToJavaReflection` recipe into six focused, independently-usable per-API recipes that share a configurable, package-private `WhiteboxToReflectionVisitor`. The released `org.openrewrite.java.testing.mockito.PowerMockWhiteboxToJavaReflection` name is preserved as a declarative YAML composite listing the six, so by-name usage and the `ReplacePowerMockito` reference are unaffected. This also expands Whitebox coverage: the `Class where` overloads of `set`/`getInternalState`, static `invokeMethod`, and `getField`/`getMethod`/ `invokeConstructor`. Each recipe gates its visitor with `UsesMethod` on its own matchers, and the shared visitor is configured per recipe (matchers + target reflect import) rather than via inheritance hooks.
Drop the getField, getMethod and invokeConstructor recipes and the where-overload / static-invokeMethod handling, so this PR is a pure refactor of the released PowerMockWhiteboxToJavaReflection recipe (setInternalState, getInternalState, invokeMethod) into three per-API recipes plus the shared WhiteboxToReflectionVisitor, with no behavior change versus main. The broader API coverage will follow in a separate PR.
PowerMockWhiteboxToJavaReflection into per-API recipesPowerMockWhiteboxToJavaReflection into per-API recipes
Comment on lines
+70
to
+74
| return prefix + sink.castType + " " + sink.varName + " = (" + sink.castType + ") " + varName + ".get(#{any(java.lang.Object)});"; | ||
| } | ||
| return prefix + "Object " + sink.varName + " = " + varName + ".get(#{any(java.lang.Object)});"; | ||
| } | ||
| return prefix + varName + ".get(#{any(java.lang.Object)});"; |
Contributor
There was a problem hiding this comment.
Why does this one use concatenation but the next file use StringBuilder?
Member
|
@copilot resolve the merge conflicts in this pull request |
Contributor
Resolved in the latest two commits. The merge brings in the 4-arg
|
timtebeek
approved these changes
Jun 16, 2026
mergify Bot
added a commit
to robfrank/linklift
that referenced
this pull request
Jun 18, 2026
…rom 3.37.0 to 3.38.0 [skip ci] Bumps [org.openrewrite.recipe:rewrite-testing-frameworks](https://github.com/openrewrite/rewrite-testing-frameworks) from 3.37.0 to 3.38.0. Release notes *Sourced from [org.openrewrite.recipe:rewrite-testing-frameworks's releases](https://github.com/openrewrite/rewrite-testing-frameworks/releases).* > 3.38.0 > ------ > > What's Changed > -------------- > > * Don't add MockitoExtension during migration when unsafe ([#875](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/issues/875)) by [`@timtebeek`](https://github.com/timtebeek) in [openrewrite/rewrite-testing-frameworks#1017](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/pull/1017) > * Add junit-platform-launcher testRuntimeOnly dependency for Gradle during JUnit 6 migration by [`@timtebeek`](https://github.com/timtebeek) in [openrewrite/rewrite-testing-frameworks#1018](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/pull/1018) > * Migrate removed LocalStack Service enum and getEndpointOverride in Testcontainers 2.x migration by [`@MBoegers`](https://github.com/MBoegers) in [openrewrite/rewrite-testing-frameworks#1014](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/pull/1014) > * Re-include CloseUnclosedStaticMocks in Mockito1to4Migration by [`@steve-aom-elliott`](https://github.com/steve-aom-elliott) in [openrewrite/rewrite-testing-frameworks#1019](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/pull/1019) > * Update MockWebServer MockResponse test for nested-type render change by [`@steve-aom-elliott`](https://github.com/steve-aom-elliott) in [openrewrite/rewrite-testing-frameworks#1020](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/pull/1020) > * Fix UsesType precondition pattern in KotlinTestMethodsShouldReturnUnit by [`@timtebeek`](https://github.com/timtebeek) in [openrewrite/rewrite-testing-frameworks#1022](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/pull/1022) > * Support 4-arg Whitebox.setInternalState(target, field, value, Class) by [`@MBoegers`](https://github.com/MBoegers) in [openrewrite/rewrite-testing-frameworks#1023](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/pull/1023) > * Refactor `PowerMockWhiteboxToJavaReflection` into per-API recipes by [`@MBoegers`](https://github.com/MBoegers) in [openrewrite/rewrite-testing-frameworks#1021](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/pull/1021) > * Box primitive casts in `Whitebox.getInternalState`/`invokeMethod` reflection by [`@MBoegers`](https://github.com/MBoegers) in [openrewrite/rewrite-testing-frameworks#1024](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/pull/1024) > > **Full Changelog**: <openrewrite/rewrite-testing-frameworks@v3.37.0...v3.38.0> Commits * [`862bd49`](openrewrite/rewrite-testing-frameworks@862bd49) Box primitive casts in Whitebox getInternalState/invokeMethod reflection ([#1024](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/issues/1024)) * [`9e86af9`](openrewrite/rewrite-testing-frameworks@9e86af9) Refactor `PowerMockWhiteboxToJavaReflection` into per-API recipes ([#1021](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/issues/1021)) * [`30c392d`](openrewrite/rewrite-testing-frameworks@30c392d) Support 4-arg Whitebox.setInternalState(target, field, value, Class) ([#1023](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/issues/1023)) * [`c9cd3bd`](openrewrite/rewrite-testing-frameworks@c9cd3bd) Fix UsesType precondition pattern in KotlinTestMethodsShouldReturnUnit ([#1022](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/issues/1022)) * [`a602b44`](openrewrite/rewrite-testing-frameworks@a602b44) OpenRewrite recipe best practices * [`ff368ff`](openrewrite/rewrite-testing-frameworks@ff368ff) Update UpdateMockWebServerMockResponse test for nested-type render change ([#1](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/issues/1)... * [`45342dc`](openrewrite/rewrite-testing-frameworks@45342dc) Re-include CloseUnclosedStaticMocks in Mockito1to4Migration ([#1019](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/issues/1019)) * [`e1cb892`](openrewrite/rewrite-testing-frameworks@e1cb892) Migrate removed LocalStack `Service` enum and `getEndpointOverride` in Testco... * [`3934d1e`](openrewrite/rewrite-testing-frameworks@3934d1e) Add junit-platform-launcher testRuntimeOnly dependency for Gradle during JUni... * [`d5554a9`](openrewrite/rewrite-testing-frameworks@d5554a9) Don't add MockitoExtension during migration when unsafe ([#875](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/issues/875)) ([#1017](https://redirect.github.com/openrewrite/rewrite-testing-frameworks/issues/1017)) * Additional commits viewable in [compare view](openrewrite/rewrite-testing-frameworks@v3.37.0...v3.38.0)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Refactors the released
PowerMockWhiteboxToJavaReflectioninto three focused per-API recipes, aggregated under the existing recipe name as a declarative composite:PowerMockWhiteboxSetInternalStateToJavaReflectionPowerMockWhiteboxGetInternalStateToJavaReflectionPowerMockWhiteboxInvokeMethodToJavaReflectionThe released
org.openrewrite.java.testing.mockito.PowerMockWhiteboxToJavaReflectionname is preserved as a YAML composite inpowermockito.yml, so by-name usage and theReplacePowerMockitoreference are unaffected. Behavior is unchanged — the same three APIs (setInternalState,getInternalState,invokeMethod) migrate exactly as before.PowerMockWhiteboxSetInternalStateToJavaReflectionalso handles the 4-argWhitebox.setInternalState(target, field, value, Class)where-overload, using the suppliedClassargument as thegetDeclaredFieldreceiver to correctly resolve fields declared on a superclass.How
WhiteboxToReflectionVisitor, configured per recipe (constructor-providedMethodMatcher+ targetjava.lang.reflectimport).UsesMethodon its own matcher.WhiteboxToReflectionVisitorprovides bothfieldLookupPrefix(3-arg path:target.getClass().getDeclaredField) andfieldLookupPrefixWhere(4-arg path:whereClass.getDeclaredField) helpers.Tests
@DocumentExample; the existing test cases are preserved verbatim, split by API.PowerMockWhiteboxToJavaReflectionTestis retained as the aggregate test (viarecipeFromResources) plus a mixed-API test exercising the composite.setInternalStateWithWhereClassandsetInternalStateWithWhereClassVariabletests cover the 4-arg overload in both the per-recipe and aggregate test classes.recipeCsvValidatepasses.Notes
Incorporates the 4-arg
setInternalStatesupport from main alongside the per-API refactor. Broader Whitebox coverage (staticinvokeMethod,getField/getMethod/invokeConstructor) will follow in a separate PR.